package Stream;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 定义集合HashSet，添加以下数据：
 * "王佳乐","张三丰","王思聪","张飞","刘晓敏","张靓颖","王敏"
 *
 * (注意set集合保存的数据并不一定会和添加的顺序一致,所以需要先输出set集合中所有的元素查看原始顺序)
 *
 * **要求:**
 * 1:使用Stream流的filter()方法筛选集合中所有的“张”姓学员；
 * 筛选后，获取前两个，并打印。
 * 2:重新获取Stream流，用filter()方法筛选出所有的“王”姓学员；
 * 筛选后，跳过第1个，打印剩余的人员。
 */

public class StreamTest05 {
    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<>();
        hashSet.add("王佳乐");
        hashSet.add("张三丰");
        hashSet.add("王思聪");
        hashSet.add("张飞");
        hashSet.add("刘晓敏");
        hashSet.add("张靓颖");
        hashSet.add("王敏");

        /**
         * **要求:**
         * 1:使用Stream流的filter()方法筛选集合中所有的“张”姓学员；
         * 筛选后，获取前两个，并打印。
         * 2:重新获取Stream流，用filter()方法筛选出所有的“王”姓学员；
         * 筛选后，跳过第1个，打印剩余的人员。
         */

        System.out.print("set集合的原始元素是:");
        System.out.println(hashSet);

        List<String> list = hashSet.stream().filter(s -> s.startsWith("张")).limit(2).collect(Collectors.toList());
        System.out.print("前两个姓张的元素是:");
        System.out.println(list);

        List<String> list1 = hashSet.stream().filter(s -> s.startsWith("王")).skip(1).collect(Collectors.toList());
        System.out.print("跳过第1个姓王的元素是:");
        System.out.println(list1);
        System.out.println("---------------------------");


        /**
         * **要求:**
         * 1:筛选出所有的“张”姓学员;
         * 2:筛选出所有的“王”姓学员；
         * 3:将两个流合并为一个流后找出名字是3个字的名字数量
         */

        System.out.print("set集合的原始元素是:");
        System.out.println(hashSet);

        Stream<String> streamZ = hashSet.stream().filter(s -> s.startsWith("张"));
        Stream<String> streamW = hashSet.stream().filter(s -> s.startsWith("王"));
        List<String> collect = Stream.concat(streamZ, streamW).filter(s -> s.length() == 3).collect(Collectors.toList());
        System.out.print("姓张和姓王并且姓名长度是3的人共有:");
        System.out.println(collect.size());
    }
}
